package com.oceansoft.mobile.common.dao;

import java.util.List;
import java.util.Map;

import org.springframework.jdbc.core.RowMapper;

import com.oceansoft.mobile.biz.front.entity.Condition;

/**
 * 通用数据库操作接口组件
 *
 * @author: chenw
 * @time: 2014/3/26 20:35
 */
public interface ICommonDao {
    /**
     * 加载指定实体类数据<br/>
     * 加载对象必须保证唯一，否则报出异常
     *
     * @param sql    查询SQL
     * @param params 查询条件
     * @return <T> 唯一对象
     */
    public <T> T loadOne(String sql, RowMapper<T> rowMapper, Object... params);

    /**
     * 加载模块(栏目)信息
     *
     * @param sql       查询SQL
     * @param rowMapper 数据库记录对象映射器
     * @param params    查询条件
     * @return List<T> 对象列表
     */
    public <T> List<T> loadList(String sql, RowMapper<T> rowMapper, Object... params);
    
    public <T> List<T> loadList(String sql, RowMapper<T> rowMapper);

    /**
     * 保存对象
     *
     * @param sql    执行SQL,<b>字段点位符使用:id</b>
     * @param object 保存对象
     * @return int 1保存成功 0 保存失败
     */
    public int saveOne(String sql, Object object);
    

    /**
     * 加载符合条件数据总量
     *
     * @param sql    查询SQL
     * @param params 查询条件
     * @return 符合条件记录总数
     */
    public int getCount(String sql, Object... params);
    
    public Integer getIntColumn(String sql,Object... params);

    /**
     * 更新表指定值、列值
     *
     * @param taleName          表名
     * @param filterColumnName  过滤列名
     * @param filterColumnValue 过滤列值
     * @param updateColumnName  更新列列名
     * @param newColumnValue    更新列新值
     * @return int
     */
    public int updateColumn(String taleName, String filterColumnName, Object filterColumnValue, String updateColumnName, Object newColumnValue);

    public int updateColumn2(String tableName, String filterColumnName, Object filterColumnValue, String updateColumnName, Object newColumnValue, String updateColumnName2, Object newColumnValue2);
    /**
     * 批量更新操作
     *
     * @param sql     批量执行SQL脚本
     * @param objects 批量更新数据集合
     * @return int[]
     */
    public int[] updateBatch(String sql, List<Object[]> objects);

    /**
     * 根据唯主键删除一条记录
     *
     * @param sql 删除语句
     * @param id  主键ID
     * @return 受影响行数（1）
     */
    public int deleteOne(String sql, long id);

    /**
     * 更新一条记录
     *
     * @param sql    更新记录SQL
     * @param object 栏目信息
     * @return 受影响行数(1)
     */
    public int updateOne(String sql, Object object);

    /**
     * 更新记录
     * @param sql
     * @param params
     * @return
     */
    public int update(String sql, Object... params);
    
    /**
     * 更新一条记录
     *
     * @param sql    更新记录SQL
     * @param params 更新参数
     * @return 受影响行数
     */
    public int updateOne(String sql, Object... params);

    /**
     * 根据查询条件查找符合条件记录中的一列，<br>如：根据条件查询表中符合条件记录的ID</br>
     *
     * @param sql    查询SQL
     * @param clazz  主键类型
     * @param params 查询过滤条件
     * @return List<T> 符合条件记录的主键
     */
    public <T> List<T> loadOneColumn(String sql, Class<T> clazz, Object... params);

    /**
     * @param sql    查询SQL
     * @param params 查询过滤条件
     * @return 符合条件记录Map集合
     */
    public List<Map<String, Object>> loadMapList(String sql, Object... params);
    
    
    /**
     * 获得一个String类型的列
     * @param sql
     * @param params
     * @return
     */
    public String getStringColumn(String sql,Object... params);
    
    public int getPK();
    
    public int[] saveBatch(String sql, List<?> objects);



	public int getPrizeCount(String string);



	

	public void setPrizeCount(int count1, String string);

	public int insertWinner(String idCard,String mobile,int type,String weixinId,int sid);

//	int selectWeiXin(String weixin);


	public int loadFirst(String weixinId);
//	public Condition loadFirst(String weixinId);

	public void insertFirst(String weixinId);

    int updateStatusByPbId(String name, String content, String dbid,String remark);

//	public int loadPrize(String weixinId);
    
   
}
